Part5 - Simple Service
Basic ROS2 Service
Service#
simple_service
import rclpy
from rclpy.node import Node
from std_srvs.srv import SetBool
from std_srvs.srv._set_bool import SetBool_Request, SetBool_Response
class MinimalService(Node):
def __init__(self):
super().__init__('minimal_service')
self.srv = self.create_service(SetBool, 'echo_service', self.echo_callback)
def echo_callback(self, request: SetBool_Request, response: SetBool_Response) -> SetBool_Response:
self.get_logger().info("Service callback")
response.success = request.data
response.message = "success"
return response
def main(args=None):
rclpy.init(args=args)
minimal_service = MinimalService()
rclpy.spin(minimal_service)
minimal_service.destroy_node()
rclpy.shutdown()
if __name__ == '__main__':
main()
Usage#
list
ros2 service list
# Result
/echo_service
/minimal_service/describe_parameters
/minimal_service/get_parameter_types
/minimal_service/get_parameters
/minimal_service/list_parameters
/minimal_service/set_parameters
/minimal_service/set_parameters_atomically
ros2 service type /echo_service
# Result
std_srvs/srv/SetBool
show interface
ros2 interface show std_srvs/srv/SetBool
# Result
bool data # e.g. for hardware enabling / disabling
---
bool success # indicate successful run of triggered service
string message # informational, e.g. for error messages
call#
service call
ros2 service call /echo_service std_srvs/srv/SetBool "{data: True}"
# Result
requester: making request: std_srvs.srv.SetBool_Request(data=True)
response:
std_srvs.srv.SetBool_Response(success=True, message='success')
Warning
Space are mandatory between data and the value
Example: {data: True} from service call